package com.xw.controller;

import com.xw.base.config.wx.ProjectUrlConfig;
import com.xw.enums.ResultEnum;
import com.xw.exception.YdException;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * @Description: 微信权限认证
 * @Author: renhuiyong
 * @CreateDate: 2018/12/18 1:05 PM
 * @Version: 1.0
 */
@Controller
@RequestMapping("/wechat")
@Slf4j
public class WechatController {
    @Autowired
    private WxMpService wxMpService;

    @Autowired
    private WxMpService wxOpenService;

    @Autowired
    private ProjectUrlConfig projectUrlConfig;

    @GetMapping("/authorize")
    public String authorize(@RequestParam("returnUrl") String returnUrl) throws UnsupportedEncodingException {
        System.out.println(returnUrl);
        String url = projectUrlConfig.getWechatMpAuthorize() + "/sxhyd/wechat/userInfo";
        String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, URLEncoder.encode(returnUrl,"UTF-8"));
        log.info("[微信网页授权] 获取code, redirectUrl = {}", redirectUrl);
        return "redirect:" + redirectUrl;
    }

    @GetMapping("/userInfo")
    public String userInfo(@RequestParam("code") String code, @RequestParam("state") String returnUrl) {

        WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
        try {
            wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
        } catch (WxErrorException e) {
            log.error("[微信网页授权] {}", e);
            throw new YdException(ResultEnum.WECHAT_MP_ERROR.getCode(), e.getError().getErrorMsg());
        }
//        UserInfo u = userInfoService.findByOpenId(openId);
//        if (u == null) {
//            userInfoService.save(wxMpUser, urls[1].substring(9));
//        }
//        return "redirect:" + returnUrl + "?openid=" + openId;
        return null;
    }


//    @GetMapping("/qrAuthorize")
//    public String qrAuthorize(@RequestParam("returnUrl") String returnUrl) {
//        String url = projectUrlConfig.getWechatOpenAuthorize() + "/sell/wechat/qrUserInfo";
//        String redirectUrl = wxOpenService.buildQrConnectUrl(url, WxConsts.QrConnectScope.SNSAPI_LOGIN, URLEncoder.encode(returnUrl));
//        return "redirect:" + redirectUrl;
//    }
//
//    @GetMapping("/qrUserInfo")
//    public String qrUserInfo(@RequestParam("code") String code, @RequestParam("state") String returnUrl) {
//        WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
//        try {
//            wxMpOAuth2AccessToken = wxOpenService.oauth2getAccessToken(code);
//        } catch (WxErrorException e) {
//            log.error("[微信扫码登录] {}", e);
//            throw new YdException(ResultEnum.WECHAT_MP_ERROR.getCode(), e.getError().getErrorMsg());
//        }
//        String openId = wxMpOAuth2AccessToken.getOpenId();
//        return "redirect:" + returnUrl + "?openid=" + openId;
//    }
}
